Skip to main content

valueOf()与 toString()的区别

const a = {
valueOf() {
return 'valueOf'
},
toString() {
return 'toString'
},
get() {
return 'get'
}
}
alert(a)

答案:默认情况,会调用 toString()方法,只会弹出toString字符串

下面看看重写对象的 toString()与 valueOf()方法,并且同时存在时会发生什么:

var bbb = {
i: 10,
toString: function () {
console.log('toString')
return this.i
},
valueOf: function () {
console.log('valueOf')
return this.i
}
}
alert(bbb) // 10 toString
alert(+bbb) // 10 valueOf
alert('' + bbb) // 10 valueOf
alert(String(bbb)) // 10 toString
alert(Number(bbb)) // 10 valueOf
alert(bbb == '10') // true valueOf

二者并存的情况下,在数值运算中,优先调用了 valueOf,字符串运算中,优先调用了 toString。而’ '+bbb 是字符串操作,为啥也是调用 valueOf,那是因为,存在操作符,valueOf 的优先级高于 toString。

回到本题: alert(obj)不存在数值运算,和其他操作符,所以默认调用 toString 方法。 结果为:toString。